RegExp-এ Lookahead এবং Lookbehind এমন বিশেষ প্যাটার্ন চেকিং কৌশল, যা একটি স্ট্রিংয়ের নির্দিষ্ট অবস্থান থেকে আগে বা পরে থাকা তথ্যের উপর ভিত্তি করে মিল খুঁজে পেতে ব্যবহৃত হয়। এই কৌশলগুলির মাধ্যমে আপনি স্ট্রিংয়ের কোনো নির্দিষ্ট অংশকে প্রত্যক্ষভাবে মেলে না (অর্থাৎ মেলা হওয়া অংশ স্ট্রিংয়ের অংশ হিসেবে অন্তর্ভুক্ত হয় না), কিন্তু শুধুমাত্র প্যাটার্নের উপস্থিতি যাচাই করতে পারেন।
Lookahead (এগিয়ে চেক করা)
Lookahead একটি প্যাটার্নের এমন অংশ যেটি স্ট্রিংয়ের নির্দিষ্ট স্থানে অবস্থান করে থাকলেও, মেলা হওয়া অংশ স্ট্রিংয়ের ফলস্বরূপ অংশ হিসেবে অন্তর্ভুক্ত হয় না। এটি অফসেট চেকিং পদ্ধতি হিসেবে কাজ করে, যেখানে আপনি জানাতে পারেন যে প্যাটার্নটি একটি নির্দিষ্ট অবস্থানে থাকতে হবে, কিন্তু সে অংশটি মেলা হওয়া স্ট্রিংয়ের অংশ হিসেবে গণ্য হবে না।
Syntax:
/pattern(?=condition)/
এখানে, (?=condition) হল positive lookahead যা মেলে যদি এবং শুধু যদি পরবর্তী অংশের মধ্যে condition থাকে।
উদাহরণ: Positive Lookahead
let regex = /\d(?=\D)/;
let str = "123a";
console.log(regex.test(str)); // true
এখানে, \d(?=\D) প্যাটার্নটি একটি সংখ্যা \d চেক করছে, এবং নিশ্চিত হচ্ছে যে তার পরে একটি অসংখ্য অক্ষর (non-digit) আছে (?=\D)। এটি "123a" স্ট্রিংয়ের মধ্যে প্রথম সংখ্যা 1 এর পরে "a" পায়, যা একটি non-digit অক্ষর।
Negative Lookahead (আগে কিছু না থাকা)
Negative Lookahead হল এমন একটি প্যাটার্ন যেখানে আপনি নিশ্চিত করতে চান যে কোনো নির্দিষ্ট প্যাটার্ন একটি স্থানে অবস্থান না করে। এই কৌশলটি negative মিল খুঁজে পেতে ব্যবহৃত হয়, অর্থাৎ প্যাটার্নটি মিলবে না যদি পরবর্তী অংশে কোনো নির্দিষ্ট শর্ত থাকে।
Syntax:
/pattern(?!condition)/
এখানে, (?!condition) হল negative lookahead যা মেলে যদি পরবর্তী অংশে condition না থাকে।
উদাহরণ: Negative Lookahead
let regex = /\d(?!\D)/;
let str = "1234";
console.log(regex.test(str)); // true
এখানে, \d(?!\D) প্যাটার্নটি একটি সংখ্যা \d চেক করছে এবং নিশ্চিত করছে যে তার পরে কোনো অসংখ্য অক্ষর (non-digit) নেই। এটি "1234" স্ট্রিংয়ের মধ্যে প্রথম সংখ্যা 1 এর পরে আর কোনো non-digit অক্ষর না পাওয়ায় মিলবে।
Lookbehind (পিছনে চেক করা)
Lookbehind একটি প্যাটার্নের অংশ যেখানে আপনি স্ট্রিংয়ের নির্দিষ্ট স্থানে থাকা অংশের আগের দিকে পরীক্ষা করতে পারেন, কিন্তু সেই অংশটি মেলা হওয়া স্ট্রিংয়ের অংশ হিসেবে গণ্য হবে না। অর্থাৎ, আপনি যদি জানতে চান যে প্যাটার্নটি কোনো নির্দিষ্ট অংশের পরে উপস্থিত আছে, তাহলে আপনি lookbehind ব্যবহার করতে পারেন।
Syntax:
/(?<=condition)pattern/
এখানে, (?<=condition) হল positive lookbehind যা মেলে যদি condition প্যাটার্নের আগে কোনো নির্দিষ্ট শর্ত থাকে।
উদাহরণ: Positive Lookbehind
let regex = /(?<=@)\w+/;
let str = "email@example.com";
console.log(regex.test(str)); // true
এখানে, (?<=@)\w+ প্যাটার্নটি চেক করছে যে একটি শব্দ \w+ ঠিক @ চিহ্নের পরে এসেছে। "email@example.com" স্ট্রিংয়ের মধ্যে @ এর পরে "example" পাওয়া যাচ্ছে, যা মেলে।
Negative Lookbehind (পিছনে কিছু না থাকা)
Negative Lookbehind হল এমন একটি প্যাটার্ন যেখানে আপনি নিশ্চিত করতে চান যে কোনো নির্দিষ্ট প্যাটার্ন একটি স্থানে পূর্ববর্তী অংশে উপস্থিত নয়।
Syntax:
/(?<!condition)pattern/
এখানে, (?<!condition) হল negative lookbehind যা মেলে যদি condition প্যাটার্নটি পূর্ববর্তী অংশে না থাকে।
উদাহরণ: Negative Lookbehind
let regex = /(?<!@)\w+/;
let str = "user123";
console.log(regex.test(str)); // true
এখানে, (?<!@)\w+ প্যাটার্নটি চেক করছে যে একটি শব্দ \w+ পূর্বে @ না থাকলে মেলে। "user123" স্ট্রিংয়ের মধ্যে "user123" এর পূর্বে কোনো @ চিহ্ন নেই, তাই এটি মেলে।
সারাংশ
Lookaheads এবং Lookbehinds হল RegExp-এ বিশেষ ধরনের প্যাটার্ন মেলানোর কৌশল।
- Lookahead প্যাটার্নটি স্ট্রিংয়ের আগের অংশে মেলানোর চেষ্টা করে, কিন্তু সেই অংশটি স্ট্রিংয়ের অংশ হিসেবে অন্তর্ভুক্ত হয় না।
- Positive lookahead: পরবর্তী অংশের শর্ত পূর্ণ হলে মেলে।
- Negative lookahead: পরবর্তী অংশে শর্ত না থাকলে মেলে।
- Lookbehind প্যাটার্নটি স্ট্রিংয়ের পূর্ববর্তী অংশে মেলানোর চেষ্টা করে, কিন্তু সেই অংশটি স্ট্রিংয়ের অংশ হিসেবে অন্তর্ভুক্ত হয় না।
- Positive lookbehind: পূর্ববর্তী অংশে শর্ত পূর্ণ হলে মেলে।
- Negative lookbehind: পূর্ববর্তী অংশে শর্ত না থাকলে মেলে।
এগুলি সাধারণত স্ট্রিংয়ের নির্দিষ্ট অবস্থান বা শর্ত যাচাই করতে ব্যবহৃত হয়, যেখানে মিল পাওয়ার পরে মেলা অংশগুলো অন্তর্ভুক্ত করা হয় না।
Read more